package com.controller.user;

import com.entity.Goods;
import com.entity.Order;
import com.service.user.SellerService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 响应买家页的所有请求
 *
 * 
 */
@RestController
@CrossOrigin
public class SellerController {

  @Autowired SellerService sellerService;

  /**
   * 添加商品
   *
   * @param userId 用户名
   * @param name 书名 不为空
   * @param file 封面图片（只能是jpg/jpeg/png/gif格式的图片文件) 不为空
   * @param price 价格 不为空
   * @param appearance 品相 不为空
   * @param ISBN ISBN码
   * @param categoryId 类别编号，不为空
   * @param author 作者
   * @param translator 译者
   * @param version 版本号
   * @param store 库存
   * @param freight 邮费，不为空
   * @param pressHorse 出版社
   * @param publicationDate 出版日期
   * @param describe 商品描述
   * @param status 商品状态（1为直接上架，0为不上架)
   * @return 添加成功返回书籍编号和书籍封面图片url，否则返回null
   */
  @PostMapping("seller/addGood")
  public Map<String, String> addGood(
      @RequestParam("userId") String userId,
      @RequestParam("name") String name,
      @RequestParam("image") MultipartFile file,
      @RequestParam("price") String price,
      @RequestParam("appearance") String appearance,
      @RequestParam("ISBN") String ISBN,
      @RequestParam("categoryId") int categoryId,
      @RequestParam("author") String author,
      @RequestParam("translator") String translator,
      @RequestParam("version") String version,
      @RequestParam("store") int store,
      @RequestParam("freight") String freight,
      @RequestParam("pressHorse") String pressHorse,
      @RequestParam("publicationDate") String publicationDate,
      @RequestParam("describe") String describe,
      @RequestParam("status") int status) {

    float priceFloat;
    float freightFloat;
    try {
      priceFloat = Float.parseFloat(price);
      freightFloat = Float.parseFloat(freight);
    } catch (NumberFormatException exp) {
      return null;
    }

    Date publicationDate1 = null;
    try {
      publicationDate1 = new Date(publicationDate);
    } catch (Exception e) {

    }

    return sellerService.addAGoods(
        userId,
        name,
        file,
        priceFloat,
        appearance,
        ISBN,
        categoryId,
        author,
        translator,
        version,
        store,
        freightFloat,
        pressHorse,
        publicationDate1,
        describe,
        status);
  }

  /**
   * 添加商品更多图片或视频描述，每个商品最多允许添加5个描述，单个描述不超过20MB
   *
   * @param userId 用户编号
   * @param goodId 商品编号
   * @param files 文件列表(只能是图片或视频）
   * @return 添加成功文件的url列表
   */
  @PostMapping("seller/addGoodMoreFiles")
  public List<String> addGoodMoreFiles(
      @RequestParam("userId") String userId,
      @RequestParam("goodId") String goodId,
      @RequestParam("files[]") MultipartFile[] files) {
    return sellerService.addGoodsMoreFiles(userId, goodId, files);
  }

  /**
   * 修改商品信息
   *
   * @param userId 用户编号
   * @param goodId 商品编号 其他参数见添加商品
   * @return 修改成功反回1 否则返回0(不是自己的书籍修改不成功)
   */
  @PostMapping("seller/chGoodInfo")
  public String chGoodInfo(
      @RequestParam("userId") String userId,
      @RequestParam("goodId") String goodId,
      @RequestParam("name") String name,
      @RequestParam("price") float price,
      @RequestParam("appearance") String appearance,
      @RequestParam("ISBN") String ISBN,
      @RequestParam("categoryId") int categoryId,
      @RequestParam("author") String author,
      @RequestParam("translator") String translator,
      @RequestParam("version") String version,
      @RequestParam("store") int store,
      @RequestParam("freight") float freight,
      @RequestParam("pressHorse") String pressHorse,
      @RequestParam("publicationDate") String publicationDate,
      @RequestParam("describe") String describe) {
    Date publicationDate1 = null;
    try {
      publicationDate1 = new Date(publicationDate);
    } catch (Exception e) {

    }
    int row =
        sellerService.chGoodInfo(
            userId,
            goodId,
            name,
            price,
            appearance,
            ISBN,
            categoryId,
            author,
            translator,
            version,
            store,
            freight,
            pressHorse,
            publicationDate1,
            describe);
    return String.valueOf(row);
  }

  /**
   * 修改商品封面图片
   *
   * @param userId 用户编号
   * @param goodId 商品编号
   * @param file 图片文件
   * @return 修改成功返回url,失败返回null
   */
  @PostMapping("seller/chGoodCoverImage")
  public String chGoodCoverImage(
      @RequestParam("userId") String userId,
      @RequestParam("goodId") String goodId,
      @RequestParam("image") MultipartFile file) {
    return sellerService.chGoodCoverImage(userId, goodId, file);
  }

  /**
   * 删除商品更多图片或视频
   *
   * @param userId 用户编号
   * @param goodId 商品编号
   * @param fileURL 要删除的文件的url
   * @return 删除成功返回1，否则返回0
   */
  @PostMapping("seller/delGoodMoreFile")
  public String delGoodMoreFile(
      @RequestParam("userId") String userId,
      @RequestParam("goodId") String goodId,
      @RequestParam("fileURL") String fileURL) {
    int ret = sellerService.delGoodMoreFile(userId, goodId, fileURL);
    return String.valueOf(ret);
  }

  /**
   * 获取卖家自己的商品
   *
   * @param userId 用户编号
   * @param goodStatus 商品状态
   * @return 卖家的对应状态的对应页的商品列表
   */
  @GetMapping("seller/getMyGoodCount")
  public String getMyGoodCount(
      @RequestParam("userId") String userId, @RequestParam("goodStatus") int goodStatus) {
    int count = sellerService.getMyGoodCount(userId, goodStatus);
    return String.valueOf(count);
  }

  /**
   * 获取卖家自己的商品
   *
   * @param userId 用户编号
   * @param goodsStatus 商品状态
   * @param pageSize 页大小
   * @param pageIndex 页索引
   * @return 卖家的对应状态的对应页的商品列表
   */
  @GetMapping("seller/getMyGoods")
  public List<Goods> getMyGoods(
      @RequestParam("userId") String userId,
      @RequestParam("goodsStatus") int goodsStatus,
      @RequestParam("pageSize") int pageSize,
      @RequestParam("pageIndex") int pageIndex) {
    return sellerService.getMyGoods(userId, goodsStatus, pageSize, pageIndex);
  }

  /**
   * 获取卖家的书籍，书籍状态最小状态为0
   *
   * @param userId 卖家编号
   * @param goodId 商品编号
   * @return 书籍的详细信息
   */
  @GetMapping("seller/getMyGoodDetail")
  public Goods getMyGoodDetail(
      @RequestParam("userId") String userId, @RequestParam("goodId") String goodId) {
    return sellerService.getMyGoodDetail(userId, goodId);
  }

  /**
   * 上架商品
   *
   * @param userId 用户编号
   * @param goodId 商品编号
   * @return 上架成功返回1 失败返回0
   */
  @PostMapping("seller/putOnGood")
  public String putOnGood(
      @RequestParam("userId") String userId, @RequestParam("goodId") String goodId) {
    int ret = sellerService.putOnGood(userId, goodId);
    return String.valueOf(ret);
  }

  /**
   * 下架商品
   *
   * @param userId 用户编号
   * @param goodId 商品编号
   * @return 下架成功返回1 失败返回0
   */
  @PostMapping("seller/putOffGood")
  public String putOffGood(
      @RequestParam("userId") String userId, @RequestParam("goodId") String goodId) {
    int ret = sellerService.putOffGood(userId, goodId);
    return String.valueOf(ret);
  }

  /**
   * 删除商品
   *
   * @param userId 用户编号
   * @param goodId 商品编号
   * @return 删除成功返回0=1，否则返回0
   */
  @PostMapping("seller/delGood")
  public String delGood(
      @RequestParam("userId") String userId, @RequestParam("goodId") String goodId) {
    int ret = sellerService.delGood(userId, goodId);
    return String.valueOf(ret);
  }

  /**
   * 获取卖家卖书订单的数量
   *
   * @param userId 用户编号
   * @param orderStatus 订单状态
   * @return 卖家对应状态的订单数量
   */
  @PostMapping("seller/getSellOrderCount")
  public String getSellOrderCount(
      @RequestParam("userId") String userId, @RequestParam("orderStatus") int orderStatus) {
    int count = sellerService.getSellOrderCount(userId, orderStatus);
    return String.valueOf(count);
  }

  /**
   * 获取卖书订单
   *
   * @param userId 用户编号
   * @param orderStatus 订单状态
   * @param pageSize 页大小
   * @param pageIndex 页索引
   * @return 该用户对应页对应状态的卖书订单列表
   */
  @PostMapping("seller/getSellOrders")
  public List<Order> getSellOrders(
      @RequestParam("userId") String userId,
      @RequestParam("orderStatus") int orderStatus,
      @RequestParam("pageSize") int pageSize,
      @RequestParam("pageIndex") int pageIndex) {
    return sellerService.getMyOrders(userId, orderStatus, pageSize, pageIndex);
  }

  /**
   * 确认发货
   *
   * @param orderId 订单编号
   * @return 确认成功返回1，否则返回0
   */
  @PostMapping("seller/confirmDelivery")
  public String confirmDelivery(
      @RequestParam("orderId") String orderId, String courierCompany, String courierNumber) {
    int row = sellerService.confirmDelivery(orderId, courierCompany, courierNumber);
    return String.valueOf(row);
  }
}
